package com.lushuan.springboot_lushuan.controller;

import com.lushuan.springboot_lushuan.pojo.ResponseMessage;
import com.lushuan.springboot_lushuan.pojo.User;
import com.lushuan.springboot_lushuan.pojo.dto.UserDTO;
import com.lushuan.springboot_lushuan.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

@RestController     // 接口方法返回对象后转换为json 文本
@RequestMapping("/user")  // 添加类级别的映射 localhost:8088/user
public class UserController {
    // 一个系统百分之八九十类似的代码基本上都是CRUD

    @Autowired
    IUserService userService;

    // REST
    // 增加
    @PostMapping                // url localhost:8088/user  post
    public ResponseMessage add(@Validated @RequestBody UserDTO userDto) {  // userDto 前端可能会封装其它的属性
        User userAdd = userService.add(userDto);

        // 前端需要通用的响应数据的格式，而不是随意自定义的文本，所以这里封装一个返回的对象，其它Controller 接口中的方法同理
        return ResponseMessage.success(userAdd);
    }

    // 查询
    @GetMapping("/{userId}")   // localhost:8088/user/1     get
    public ResponseMessage get( @PathVariable Integer userId) {  // userDto 前端可能会封装其它的属性
        User userNew = userService.getUser(userId);

        // 前端需要通用的响应数据的格式，而不是随意自定义的文本，所以这里封装一个返回的对象，其它Controller 接口中的方法同理
        return ResponseMessage.success(userNew);
    }


    // 修改
    @PutMapping                 // url localhost:8088/user  put
    public ResponseMessage edt(@Validated @RequestBody UserDTO userDto) {  // userDto 前端可能会封装其它的属性
        User userNew = userService.editUser(userDto);

        // 前端需要通用的响应数据的格式，而不是随意自定义的文本，所以这里封装一个返回的对象，其它Controller 接口中的方法同理
        return ResponseMessage.success(userNew);
    }


    // 删除
    @DeleteMapping("/{userId}")
    public ResponseMessage delete( @PathVariable Integer userId) {  // userDto 前端可能会封装其它的属性
        userService.deleteUser(userId);
        // 前端需要通用的响应数据的格式，而不是随意自定义的文本，所以这里封装一个返回的对象，其它Controller 接口中的方法同理
        return ResponseMessage.success();
    }

}
